package iserver

import (
	"broker/interface/imodel"
	"net"
)

// IConnection 定义连接模块的抽象层
type IConnection interface {
	// Start 启动连接 让当前连接准备开始工作
	Start()
	// Stop 停止连接 结束当前连接的工作
	Stop()


	StartReader()

	StartWriter()
	
	// GetTCPConnection 获取当前连接的绑定socket conn
	GetTCPConnection() *net.TCPConn
	// GetTcpServer 获取连接的隶属服务器句柄
	GetTcpServer() IServer
	// GetConnID 获取当前连接模块的连接ID
	GetConnID() uint32
	// RemoteAddr 获取远程客户端的 TCP状态 IP port
	RemoteAddr() net.Addr
	// Send 发送数据，将数据发送给远程的客户端
	Send(data []byte) error
	// SendMsg 发送封包数据
	SendMsg(msg imodel.IMessage) error
	// SetProperty 设置连接属性
	SetProperty(key string, value interface{})
	// GetProperty 获取连接属性
	GetProperty(key string) (interface{}, error)
	// RemoveProperty 移除连接属性
	RemoveProperty(key string)
}
